home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1995 March / macformat-022.iso / Shareware City / Developers / MW MPW Binaries 1.1.1a2 / mwcPPC / MWCIncludes / SANE.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-05-04  |  5.9 KB  |  204 lines  |  [TEXT/MMCC]

  1. #ifndef __SANE__
  2. #define __SANE__
  3.  
  4. #ifndef __TYPES__
  5. #include <Types.h>
  6. #endif
  7.  
  8. //
  9. //    extended80 and extended96 were already defined in <Types.h>
  10. //
  11. #undef extended80
  12. #undef extended96
  13. #define extended80    __SANEextended80
  14. #define extended96    __SANEextended96
  15.  
  16. #define INF        (*(extended *)&__inf__)
  17. #define PI        (*(extended *)&__pi__)
  18.  
  19. extern short    __inf__[], __pi__[];
  20.  
  21. enum {    FloatDecimal,FixedDecimal };
  22. enum {    SigDigLen=20,DecStrLen=80 };                     
  23. enum {    GreaterThan,LessThan,EqualTo,Unordered };
  24. enum {    SNaN,QNaN,Infinite,ZeroNum,NormalNum,DenormalNum };
  25. enum {    ToNearest,Upward,Downward,TowardZero };
  26. enum {    ExtPrecision,DblPrecision,FloatPrecision };
  27.  
  28. typedef short RelOp;                        
  29. typedef short NumClass;                     
  30. typedef short RoundDir;                     
  31. typedef short RoundPre;                     
  32.  
  33. typedef struct Decimal {
  34.     char    sgn;                                
  35.     char    unused;
  36.     short    exp;                                
  37.     struct    {
  38.         unsigned char length;
  39.         unsigned char text[SigDigLen];        
  40.         unsigned char unused;
  41.     } sig;
  42. } Decimal;
  43.  
  44. typedef struct DecForm {
  45.     char style;
  46.     char unused;
  47.     short digits;
  48. } DecForm;
  49.  
  50. #if __MC68881__
  51.  
  52. #define INEXACT            8L
  53. #define DIVBYZERO        16L
  54. #define UNDERFLOW        32L
  55. #define OVERFLOW        64L
  56. #define INVALID            128L
  57. #define CURINEX1        256L
  58. #define CURINEX2        512L
  59. #define CURDIVBYZERO    1024L
  60. #define CURUNDERFLOW    2048L
  61. #define CUROVERFLOW        4096L
  62. #define CUROPERROR        8192L
  63. #define CURSIGNAN        16384L
  64. #define CURBSONUNOR        32768L
  65.  
  66. typedef struct { short w[5]; } __SANEextended80;
  67. typedef extended __SANEextended96;
  68.  
  69. typedef long Exception;
  70.  
  71. typedef struct Environment {
  72.     long FPCR;
  73.     long FPSR;
  74. } Environment;
  75.  
  76. typedef struct TrapVector {
  77.     void (*unordered)(void);
  78.     void (*inexact)(void);
  79.     void (*divbyzero)(void);
  80.     void (*underflow)(void);
  81.     void (*operror)(void);
  82.     void (*overflow)(void);
  83.     void (*signan)(void);
  84. } TrapVector;
  85.  
  86. #ifdef __cplusplus
  87. extern "C" {
  88. #endif
  89.  
  90. void GetTrapVector(TrapVector *);
  91. void SetTrapVector(TrapVector *);
  92.  
  93. #ifdef __cplusplus
  94. }
  95. #endif
  96.  
  97. #else
  98.  
  99. #define IEEEDEFAULTENV    0
  100. #define INVALID            1
  101. #define UNDERFLOW        2
  102. #define OVERFLOW        4
  103. #define DIVBYZERO        8
  104. #define INEXACT            16
  105.  
  106. typedef short Exception;
  107. typedef short Environment;
  108.  
  109. typedef extended __SANEextended80;
  110. typedef struct { short w[6]; } __SANEextended96;
  111.  
  112. typedef struct MiscHaltInfo {
  113.     unsigned short haltexceptions;
  114.     unsigned short pendingCCR;
  115.     long pendingD0;
  116. } MiscHaltInfo;
  117.  
  118. #ifdef __cplusplus
  119. extern "C" {
  120. #endif
  121.  
  122. typedef pascal void (*HaltVector)(MiscHaltInfo *,void *,void *,void *,short);
  123.  
  124. pascal void GetHaltVector(HaltVector *) = { 0x3F3C,0x0007,0xA9EB };
  125. pascal void SetHaltVector(HaltVector) = { 0x3F3C,0x0005,0xA9EB };
  126.  
  127. #ifdef __cplusplus
  128. }
  129. #endif
  130.  
  131. #endif                                        
  132.  
  133. #ifdef __cplusplus
  134. extern "C" {
  135. #endif
  136.  
  137. /*    Special conversion routines */
  138. void x96tox80(extended96 *,extended80 *);
  139. void x80tox96(extended80 *,extended96 *);
  140.  
  141. /*    FP68K functions */
  142. pascal void SetEnvironment(Environment *) = { 0x3F3C,0x0001,0xA9EB };
  143. pascal void GetEnvironment(Environment *) = { 0x3F3C,0x0003,0xA9EB };
  144. pascal void SetException(Exception *) = { 0x3F3C,0x0015,0xA9EB };
  145. pascal void TestException(Exception *) = { 0x3F3C,0x001B,0xA9EB };
  146. pascal void ProcEntry(Environment *) = { 0x3F3C,0x0017,0xA9EB }; 
  147. pascal void ProcExit(Environment *) = { 0x3F3C,0x0019,0xA9EB };
  148. pascal void Dec2Num(Decimal *,extended80 *) = { 0x3F3C,0x0009,0xA9EB };
  149. pascal void Num2Dec(DecForm *,extended80 *,Decimal *) = { 0x3F3C,0x000B,0xA9EB };
  150. pascal void Neg(extended80 *) = { 0x3F3C,0x000D,0xA9EB };
  151. pascal void Abs(extended80 *) = { 0x3F3C,0x000F,0xA9EB };
  152. pascal void CopySign(extended80 *to,extended80 *from) = { 0x3F3C,0x0011,0xA9EB };
  153. pascal void Sqrt(extended80 *) = { 0x3F3C,0x0012,0xA9EB };
  154. pascal void NextExtended(extended80 *,extended80 *) = { 0x3F3C,0x0013,0xA9EB };
  155. pascal void NextDouble(double *,double *) = { 0x3F3C,0x0813,0xA9EB }; 
  156. pascal void NextFloat(float *,float *) = { 0x3F3C,0x1013,0xA9EB };
  157. pascal void Rint(extended80 *) = { 0x3F3C,0x0014,0xA9EB };
  158. pascal void Tint(extended80 *) = { 0x3F3C,0x0016,0xA9EB };
  159. pascal void Scalb(short *,extended80 *) = { 0x3F3C,0x0018,0xA9EB };
  160. pascal void Logb(extended80 *) = { 0x3F3C,0x001A,0xA9EB };
  161. pascal void ClassFloat(float *,NumClass *) = { 0x3F3C,0x101C,0xA9EB };
  162. pascal void ClassDouble(double *,NumClass *) = { 0x3F3C,0x081C,0xA9EB };
  163. pascal void ClassComp(comp *,NumClass *) = { 0x3F3C,0x301C,0xA9EB };
  164. pascal void ClassExtended(extended80 *,NumClass *) = { 0x3F3C,0x001C,0xA9EB };
  165.  
  166. void Remainder(extended80 *source,extended80 *dest,short *quot);
  167. RelOp Relation(extended80 *source,extended80 *dest);
  168. short SignNum(extended80);
  169. void SetRound(RoundDir);
  170. RoundDir GetRound(void);
  171. void SetPrecision(RoundPre);
  172. RoundPre GetPrecision(void);
  173. extended NAN(short);
  174.  
  175. /*    DecStr68K functions */
  176. pascal void PStr2Dec(StringPtr,short *,Decimal *,Boolean *) = { 0x3F3C,0x0002,0xA9EE };
  177. pascal void CStr2Dec(char *,short *,Decimal *,Boolean *) = { 0x3F3C,0x0004,0xA9EE };
  178. pascal void Dec2Str(DecForm *,Decimal *,StringPtr) = { 0x3F3C,0x0003,0xA9EE };
  179.  
  180. /*    Elems68K functions */
  181. pascal void Ln(extended80 *) = { 0x3F3C,0x0000,0xA9EC };
  182. pascal void Log2(extended80 *) = { 0x3F3C,0x0002,0xA9EC };
  183. pascal void Ln1(extended80 *) = { 0x3F3C,0x0004,0xA9EC };
  184. pascal void Log21(extended80 *) = { 0x3F3C,0x0006,0xA9EC };
  185. pascal void Exp(extended80 *) = { 0x3F3C,0x0008,0xA9EC };
  186. pascal void Exp2(extended80 *) = { 0x3F3C,0x000A,0xA9EC };
  187. pascal void Exp1(extended80 *) = { 0x3F3C,0x000C,0xA9EC };
  188. pascal void Exp21(extended80 *) = { 0x3F3C,0x000E,0xA9EC };
  189. pascal void PowerI(short *source,extended80 *dest) = { 0x3F3C,0x8010,0xA9EC };
  190. pascal void Power(extended80 *source,extended80 *dest) = { 0x3F3C,0x8012,0xA9EC };
  191. pascal void Compound(extended80 *r,extended80 *n,extended80 *dest) = { 0x3F3C,0xC014,0xA9EC };
  192. pascal void Annuity(extended80 *r,extended80 *n,extended80 *dest) = { 0x3F3C,0xC016,0xA9EC };
  193. pascal void Sin(extended80 *) = { 0x3F3C,0x0018,0xA9EC };
  194. pascal void Cos(extended80 *) = { 0x3F3C,0x001A,0xA9EC };
  195. pascal void Tan(extended80 *) = { 0x3F3C,0x001C,0xA9EC };
  196. pascal void Atan(extended80 *) = { 0x3F3C,0x001E,0xA9EC };
  197. pascal void RandomX(extended80 *) = { 0x3F3C,0x0020,0xA9EC };
  198.  
  199. #ifdef __cplusplus
  200. }
  201. #endif
  202.  
  203. #endif
  204.